#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "dwgline.h"
#include "dwgcircle.h"
#include "dwgcircle2.h"
#include "dwgrect.h"
#include "dwgstar.h"
#include "dwgarc.h"
#include "qstatusbar.h"

#include <QtMath>
#include <QMainWindow>
#include <QPainter>
#include <QMouseEvent>
#include <QMessageBox>
#include <QDir>
#include <QFileDialog>
#include <QDebug>

#include <QWheelEvent>
//缩放：
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //==鼠标重载==//
    this->setMouseTracking(true);
    ui->centralWidget->setMouseTracking(true);

    m_trans.reset();                		// 先把系统的变换矩阵置为空
    m_trans.translate(0,this->height());       // 再平移坐标原点到窗口左下角
    m_trans.scale(1,-1);                    // 对坐标系的Y轴实施反向变换
//}

//MainWindow::MainWindow(QWidget *parent)
//    : QMainWindow(parent)
//    , ui(new Ui::MainWindow)
//{
//    // 为了布局DrawTab中的图标，再创建一个总的横向布局，把前面的三个布局都添加进来，
//    QHBoxLayout *drawHL = new QHBoxLayout;
//    drawHL->setAlignment(Qt::AlignLeft);
//    drawHL->setAlignment(Qt::AlignTop);
//    drawHL->setContentsMargins(0,0,0,0);

//    QVBoxLayout *drawVL = new QVBoxLayout;
//    drawVL->setAlignment(Qt::AlignLeft);
//    drawVL->setAlignment(Qt::AlignTop);
//    drawVL->setContentsMargins(0,0,0,0);

//    drawHL->addLayout(drawHL1);
//    drawVL->addLayout(drawVL2);
//    drawHL->addLayout(drawHL3);
//    drawHL->addLayout(drawHL4);

//    // 最后，把DrawTab的布局设计成刚才创建的布局
//    ui->DrawTab->setLayout(drawHL);
    // 初始化DrawTB子页面的按钮布局
    //ui->setupUi(this);                                              // 初始化UI界面

    // 创建主垂直布局（包含两行按钮）
    QVBoxLayout *mainLayout = new QVBoxLayout;                      // 主垂直布局容器
    mainLayout->setAlignment(Qt::AlignLeft | Qt::AlignTop);          // 左上对齐
    mainLayout->setContentsMargins(0, 0, 0, 0);                     // 无外边距
    mainLayout->setSpacing(0);                                      // 无内部间距

    // ***第一行水平布局（Circle和Line按钮）
    QHBoxLayout *row1Layout = new QHBoxLayout;                      // 第一行水平布局
    row1Layout->setAlignment(Qt::AlignLeft);                        // 左对齐
    row1Layout->setContentsMargins(0, 0, 0, 0);                     // 无外边距
    row1Layout->setSpacing(0);                                      // 无内部间距

    /* ===================== Circle按钮 ===================== */
    QToolButton *circleTB = new QToolButton;                        // 创建画圆按钮
    circleTB->setToolButtonStyle(Qt::ToolButtonIconOnly);           // 仅显示图标
    circleTB->setFixedSize(QSize(64,50));                           // 设置固定尺寸
    circleTB->setText("Circle");                                    // 设置按钮文本
    circleTB->setArrowType(Qt::NoArrow);                            // 无箭头样式
    circleTB->setPopupMode(QToolButton::MenuButtonPopup);           // 弹出菜单模式
    const QIcon circleIcon = QIcon::fromTheme("Circle",             // 加载图标资源
                         QIcon(":/icons/icons/Circle.ico"));
    circleTB->setIcon(circleIcon);                                  // 应用图标

    QMenu *circleMenu = new QMenu;                                  // 创建下拉菜单
    QAction *cirAct1 = new QAction(QIcon(":/icons/icons/Circle.png"),// 添加菜单项
                                  "圆心半径");
    QAction *cirAct2 = new QAction(QIcon(":/icons/icons/Circle.png"),
                                  "两点画圆");
    circleMenu->addAction(cirAct1);                                 // 添加菜单动作
    circleMenu->addAction(cirAct2);
    circleTB->setMenu(circleMenu);                                  // 绑定菜单到按钮
    connect(cirAct1, &QAction::triggered,                           // 连接信号槽
            this, &MainWindow::cirAct1_triggered);
    connect(cirAct2, &QAction::triggered,
            this, &MainWindow::cirAct2_triggered);
    row1Layout->addWidget(circleTB);                                // 添加到第一行布局

    /* ===================== Line按钮 ===================== */
    QToolButton *lineTB = new QToolButton;                          // 创建画线按钮
    lineTB->setToolButtonStyle(Qt::ToolButtonIconOnly);             // 仅显示图标
    lineTB->setFixedSize(QSize(32,32));                             // 设置固定尺寸
    lineTB->setText("Line");                                        // 设置按钮文本
    lineTB->setArrowType(Qt::NoArrow);                              // 无箭头样式
    const QIcon lineIcon = QIcon::fromTheme("Line",                 // 加载图标资源
                       QIcon(":/icons/icons/Line.ico"));
    lineTB->setIcon(lineIcon);                                      // 应用图标
    connect(lineTB, &QToolButton::clicked,                          // 连接点击信号
            this, &MainWindow::lineTB_clicked);
    row1Layout->addWidget(lineTB);                                  // 添加到第一行布局

    // ***第二行水平布局（Rect、Star和Arc按钮）
    QHBoxLayout *row2Layout = new QHBoxLayout;                      // 第二行水平布局
    row2Layout->setAlignment(Qt::AlignLeft);                        // 左对齐
    row2Layout->setContentsMargins(0, 0, 0, 0);                     // 无外边距
    row2Layout->setSpacing(0);                                      // 无内部间距

    /* ===================== Rect按钮 ===================== */
    QToolButton *rectTB = new QToolButton;                          // 创建矩形按钮
    rectTB->setToolButtonStyle(Qt::ToolButtonIconOnly);             // 仅显示图标
    rectTB->setFixedSize(QSize(32,32));                             // 设置固定尺寸
    rectTB->setText("rect");                                        // 设置按钮文本
    rectTB->setArrowType(Qt::NoArrow);                              // 无箭头样式
    const QIcon rectIcon = QIcon::fromTheme("Rect",                 // 加载图标资源
                       QIcon(":/icons/icons/Square.ico"));
    rectTB->setIcon(rectIcon);                                      // 应用图标
    connect(rectTB, &QToolButton::clicked,                          // 连接点击信号
            this, &MainWindow::rectTB_clicked);
    row2Layout->addWidget(rectTB);                                  // 添加到第二行布局

    /* ===================== Star按钮 ===================== */
    QToolButton *starTB = new QToolButton;                          // 创建星形按钮
    starTB->setToolButtonStyle(Qt::ToolButtonIconOnly);             // 仅显示图标
    starTB->setFixedSize(QSize(32,32));                             // 设置固定尺寸
    starTB->setText("star");                                        // 设置按钮文本
    starTB->setArrowType(Qt::NoArrow);                              // 无箭头样式
    const QIcon starIcon = QIcon::fromTheme("Star",                 // 加载图标资源
                       QIcon(":/icons/icons/Favourites.ico"));
    starTB->setIcon(starIcon);                                      // 应用图标
    connect(starTB, &QToolButton::clicked,                          // 连接点击信号
            this, &MainWindow::starTB_clicked);
    row2Layout->addWidget(starTB);                                  // 添加到第二行布局

    /* ===================== Arc按钮 ===================== */
    QToolButton *arcTB = new QToolButton;                           // 创建弧线按钮
    arcTB->setToolButtonStyle(Qt::ToolButtonIconOnly);              // 仅显示图标
    arcTB->setFixedSize(QSize(32,32));                              // 设置固定尺寸
    arcTB->setText("arc");                                          // 设置按钮文本
    arcTB->setArrowType(Qt::NoArrow);                               // 无箭头样式
    const QIcon arcIcon = QIcon::fromTheme("Arc",                   // 加载图标资源
                      QIcon(":/icons/icons/Arc.ico"));
    arcTB->setIcon(arcIcon);                                        // 应用图标
    connect(arcTB, &QToolButton::clicked,                           // 连接点击信号
            this, &MainWindow::arcTB_clicked);
    row2Layout->addWidget(arcTB);                                   // 添加到第二行布局

    // 最终布局组装
    mainLayout->addLayout(row1Layout);                              // 添加第一行到主布局
    mainLayout->addLayout(row2Layout);                              // 添加第二行到主布局
    ui->DrawTab->setLayout(mainLayout);                             // 应用主布局到DrawTab

    /*========================================================================================================*/
    // 下面这段用于设置File子页面中的布局和控件的位置
    ui->tabWidget->setFixedHeight(120);             // 设置QTabWidget控件的高度
    ui->FileHLayout->setAlignment(Qt::AlignLeft);  // 把File子页面中的布局设计左对齐
    ui->FileHLayout->setAlignment(Qt::AlignTop);   // 把File子页面中的布局设计上对齐
    ui->FileHLayout->setContentsMargins(0,0,0,0);  // 设置布局与子页面四边的间距为0
    ui->FileHLayout->setSpacing(0);                // 设置布局中各控件之间的间距为0

    //  下面的代码，把在UI中添加的QToolButton控件与QAction动作连接起来
    ui->NewTB->setDefaultAction(ui->actionNew);
    ui->OpenTB->setDefaultAction(ui->actionOpen);
    ui->SaveTB->setDefaultAction(ui->actionSave);
    ui->SaveAsTB->setDefaultAction(ui->actionSaveAs);
    ui->ExitTB->setDefaultAction(ui->actionExit);

//    ui->ModifyTab->setAlignment(Qt::AlignLeft);  // 把File子页面中的布局设计左对齐
//    ui->ModifyTab->setAlignment(Qt::AlignTop);   // 把File子页面中的布局设计上对齐
//    ui->ModifyTab->setContentsMargins(0,0,0,0);  // 设置布局与子页面四边的间距为0
//    ui->ModifyTab->setSpacing(0);                // 设置布局中各控件之间的间距为0
    ui->SelectTB->setDefaultAction(ui->actionSelect);
    ui->DeleteTB->setDefaultAction(ui->actionDelete);

    ui->FileTab->setLayout(ui->FileHLayout);		// 通过本语句让布局布满Tab子页面
}

MainWindow::~MainWindow()
{
    delete ui;
}

bool isFirst = true;
QPoint temppt;
QPoint movept;
QPointF firstpt,lastpt;

void MainWindow::mousePressEvent(QMouseEvent *event)
{
    movept = event->pos();
    if(event->buttons() & Qt::LeftButton)
    {
        if(mCurDrawType == DLine)
        {
            if(isFirst)
            {
                temppt = event->pos();
                firstpt = temppt;                       // 重载？
                isFirst = false;
            }
            else
            {
                DwgLine *line = new DwgLine;            // 创建并初始化一个直线对象
                //========修改鼠标点坐标位置->变换后的=======//
                QPointF pt1 = m_trans.inverted().map(temppt);
                QPointF pt2 = m_trans.inverted().map(event->pos());
                line->SetData(pt1,pt2);		            // 使用SetData函数设置私有成员变量

                //line-> SetData (temppt,event->pos());	// 使用SetData函数设置私有成员变量
                mObjVec.append(line);				    // append函数用于把对象添加到数组mLines中
                update();						        // 该函数用于刷新窗口
                isFirst = true;
            }

        }
        if(mCurDrawType == DCircle)
        {
            if(isFirst)
            {
                temppt = event->pos();
                firstpt = temppt;                       // 重载？
                isFirst = false;
            }
            else
            {
                DwgCircle *circle = new DwgCircle;          // 创建并初始化一个直线对象
                //==========修改鼠标点坐标位置->变换后的=========//
                QPointF pt1 = m_trans.inverted().map(temppt);
                QPointF pt2 = m_trans.inverted().map(event->pos());
                circle->SetData(pt1,pt2);		            // 使用SetData函数设置私有成员变量

                //circle->SetData(temppt,event->pos());		// 使用SetData函数设置私有成员变量
                mObjVec.append(circle);                     // append函数用于把对象添加到数组mLines中
                update();                                   // 该函数用于刷新窗口
                isFirst = true;
            }
        }
        if (mCurDrawType == DCircle2)
        {
            if (isFirst)
            {
                temppt = event->pos();  // 记录第一个点
                firstpt = temppt;                       // 重载？
                isFirst = false;
            }
            else
            {
                DwgCircle2 *circle = new DwgCircle2;
                //==========修改鼠标点坐标位置->变换后的=========//
                QPointF pt1 = m_trans.inverted().map(temppt);
                QPointF pt2 = m_trans.inverted().map(event->pos());
                circle->SetData(pt1,pt2);		            // 使用SetData函数设置私有成员变量

                //circle->SetData(temppt, event->pos());      // 两点确定圆
                mObjVec.append(circle);
                update();
                isFirst = true;
            }
        }
        if(mCurDrawType == DRectangle)
        {
            if(isFirst)
            {
                temppt = event->pos();
                firstpt = temppt;                       // 重载？
                isFirst = false;
            }
            else
            {
                Dwgrect *rect = new Dwgrect;                // 创建并初始化一个直线对象
                //==========修改鼠标点坐标位置->变换后的=========//
                QPointF pt1 = m_trans.inverted().map(temppt);
                QPointF pt2 = m_trans.inverted().map(event->pos());
                rect->SetData(pt1,pt2);		                // 使用SetData函数设置私有成员变量

                //QPoint pt1 = event->pos();
                //rect->SetData(temppt,pt1);		        // 使用SetData函数设置私有成员变量
                mObjVec.append(rect);                       // append函数用于把对象添加到数组mLines中
                update();                                   // 该函数用于刷新窗口
                isFirst = true;
            }
        }
        if(mCurDrawType == DStar)
        {
            if(isFirst)
            {
                temppt = event->pos();
                firstpt = temppt;                       // 重载？
                isFirst = false;
            }
            else
            {
                DwgStar *star = new DwgStar;                 // 创建并初始化一个直线对象
                //==========修改鼠标点坐标位置->变换后的=========//
                QPointF pt1 = m_trans.inverted().map(temppt);
                QPointF pt2 = m_trans.inverted().map(event->pos());
                star->SetData(pt1,pt2);		                 // 使用SetData函数设置私有成员变量

                //QPoint pt1 = event->pos();
                //star->SetData(temppt,pt1);		         // 使用SetData函数设置私有成员变量
                mObjVec.append(star);                        // append函数用于把对象添加到数组mLines中
                update();                                    // 该函数用于刷新窗口
                isFirst = true;
            }
        }
        if (mCurDrawType == DArc)
        {
            if (isFirst)
            {
                temppt = event->pos();  // 记录圆心
                firstpt = temppt;                       // 重载？
                isFirst = false;
            }
            else
            {
                DwgArc *arc = new DwgArc;
                //==========修改鼠标点坐标位置->变换后的=========//
                QPointF pt1 = m_trans.inverted().map(temppt);
                QPointF pt2 = m_trans.inverted().map(event->pos());
                arc->SetData(pt1,pt2);		                 // 使用SetData函数设置私有成员变量

                //arc->SetData(temppt, event->pos());  // 设置圆心和边缘点（计算半径）
                arc->SetAngle(-30, -120);              // 设置起始角度120°，跨度30°
                mObjVec.append(arc);
                update();
                isFirst = true;
            }
        }
        //==选择+删除==//
        if(mCurModifyType & MSelect)
        {
            QPointF spt = m_trans.inverted().map(event->pos());
            foreach (auto i, mObjVec) {
                i->Select(spt);
            }
            update();
        }
    }
}

void MainWindow::paintEvent(QPaintEvent *event)
{
    QPainter *mpainter = new QPainter(this);
    //================抑制线宽变化================//
    mpainter->save();		// 用于保存当前的绘图状态
    QPen pen;
    pen.setCosmetic(true);      // 该函数用于保持缩放时的线宽为1个像素，而不会随着缩放而变化
    //pen.setWidth(1);                 // 逻辑线宽（单位：逻辑坐标）
    mpainter->setPen(pen);

    //==设置painter的绘制矩阵为系统的变换矩阵mtrans==//
    mpainter->setWorldTransform(m_trans,true);
    if(!(firstpt.isNull() || lastpt.isNull())  &&  ! isFirst)
    {
    QPen pen;							      // 由于橡皮线一般是虚线，因此，需要先构建一支虚线的笔
    pen.setWidth(0);						  // 为提高速度，把笔的线宽设置为0
    pen.setColor(QColor(255,0,0));			  // 设置一个红色的线
    pen.setStyle(Qt::DashLine);               // 把线型设置为虚线
    mpainter->setPen(pen);				      // 把定义好的虚线赋值给当前绘图工具

    QPointF pt1 = m_trans.inverted().map(firstpt);
    QPointF pt2 = m_trans.inverted().map(lastpt);
//    QPointF pt1 = firstpt; // 无需转换，QPainter 会自动应用 m_trans
//    QPointF pt2 = lastpt;
    if(mCurDrawType == DArc)			      // 判断绘制
    {
        qreal mRad = qSqrt((pt2.x() - pt1.x()) * (pt2.x() - pt1.x()) +
                           (pt2.y() - pt1.y()) * (pt2.y() - pt1.y()));
        QPointF mCenPt = pt1;
        QRectF rect(mCenPt.x() - mRad, mCenPt.y() - mRad, 2 * mRad, 2 * mRad);
        mpainter->drawArc(rect, -30 * 16, -120 * 16);  // Qt中角度单位为1/16度
    }
    if(mCurDrawType == DLine)			      // 绘制一条虚线
        mpainter->drawLine(pt1,pt2);
    if(mCurDrawType == DCircle)
    {
        qreal rad = sqrt((pt1.x()-pt2.x())*(pt1.x()-pt2.x())
                         +(pt1.y()-pt2.y())*(pt1.y()-pt2.y()));
        mpainter->drawEllipse(pt1.x()-rad,pt1.y()-rad,rad*2,rad*2);
        mpainter->drawLine(pt1,pt2);
    }
    if(mCurDrawType == DCircle2)
    {
        QPointF mCenPt = QPointF((pt1.x() + pt2.x()) / 2.0, (pt1.y() + pt2.y()) / 2.0);
        qreal mRad = qSqrt(qPow(pt2.x() - pt1.x(), 2) + qPow(pt2.y() - pt1.y(), 2)) / 2.0;
        mpainter->drawEllipse(mCenPt, mRad, mRad);
        mpainter->drawLine(pt1,pt2);
    }
    if(mCurDrawType == DRectangle)
    {
        qreal x,y,w,h;
        x=pt1.x();
        y=pt1.y();
        w=(pt2.x()-pt1.x())?(pt2.x()-pt1.x()):(pt1.x()-pt2.x());
        h=(pt2.y()-pt1.y())?(pt2.y()-pt1.y()):(pt1.y()-pt2.y());
        mpainter->drawRect(x,y,w,h);
    }
    if(mCurDrawType == DStar)
    {
        QPointF mCenter = pt1;
        qreal mRadius = qSqrt((pt2.x()-pt1.x())*(pt2.x()-pt1.x())+
                                   (pt2.y()-pt1.y())*(pt2.y()-pt1.y()));
        QPointF points[5];
        const double angleStep = 72.0;  // 每顶点间隔72度（360/5）
        for (int i = 0; i < 5; ++i) {
            double angle = (i * angleStep - 90) * M_PI / 180;  // 转换为弧度，起始点位于正上方
            double x = mCenter.x() + mRadius * cos(angle);
            double y = mCenter.y() + mRadius * sin(angle);
            points[i] = QPointF(static_cast<int>(x), static_cast<int>(y));
        }

        // 绘制五角星路径（连接隔两顶点）
        mpainter->drawLine(points[0], points[2]);
        mpainter->drawLine(points[2], points[4]);
        mpainter->drawLine(points[4], points[1]);
        mpainter->drawLine(points[1], points[3]);
        mpainter->drawLine(points[3], points[0]);  // 闭合路径形成完整五角星
    }
    pen.setColor(Qt::black);
    pen.setStyle(Qt::SolidLine);
    update();
    }

    // 下面开始绘制主顺序链表中的已添加的图元
    foreach (auto i, mObjVec) {
        i->Draw(mpainter);
    }
    //================恢复当前绘图状态=============//
    pen.setCosmetic(false);
    mpainter->setPen(pen);
    mpainter->restore();
    delete mpainter;
}

void MainWindow::on_actionNew_triggered()
{
    int ret = QMessageBox::warning(this, "Warning",
                         "你的图形是否保存?",
                         QMessageBox::Ok | QMessageBox::Cancel);
    if(ret == QMessageBox::Ok)
    {
        qDeleteAll(mObjVec);     // 删除所有的图元对象
        mObjVec.clear();		 //  清空m_mainlist
        update();
//        ui->statusbar->showMessage("开始绘制一张新的图纸：",3000);
    }
}

void MainWindow::on_actionOpen_triggered()
{
    // 打开一个文件之前，也需要判断是否保存当前文件，我们将在以后的学习中添加
    QString curPath = QDir::currentPath();   // 获得当前程序所在的目录
    QString aFileName = QFileDialog::getOpenFileName(this,"选择一个图形文件",curPath,"CAD文件(*.*)");
    if(!aFileName.isEmpty())
        qDebug()<<"把文件内容读入到m_MainList中";
}

void MainWindow::on_actionSave_triggered()
{
    // 保存一个文件
    QString curPath = QDir::currentPath();
    QString aFileName = QFileDialog::getSaveFileName(this,"输入一个图形文件名称",curPath,"CAD文件(*.*)");
    if(!aFileName.isEmpty())
        qDebug()<<"把m_MainList中的对象写入到 : "<< aFileName;
}

void MainWindow::on_actionSaveAs_triggered()
{
    // 另存一个文件
    QString curPath = QDir::currentPath();
    QString aFileName = QFileDialog::getSaveFileName(this,"输入一个图形文件名称",curPath,"CAD文件(*.*)");
    if(!aFileName.isEmpty())
        qDebug()<<"把m_MainList中的对象写入到 : "<< aFileName;
}

void MainWindow::on_actionExit_triggered()
{
    // 退出程序之前，需要检查文件是否保存，我们将在以后的学习中添加代码
    this->close(); // this指代窗口
}

void MainWindow::lineTB_clicked()
{
    mCurDrawType = DLine;
    mCurModifyType = MNone;
    this->setCursor(Qt::CrossCursor);
}

void MainWindow::rectTB_clicked()
{
    mCurDrawType = DRectangle;
    mCurModifyType = MNone;
    this->setCursor(Qt::CrossCursor);
}

void MainWindow::starTB_clicked()
{
    mCurDrawType = DStar;
    mCurModifyType = MNone;
    this->setCursor(Qt::CrossCursor);
}

void MainWindow::arcTB_clicked()
{
    mCurDrawType = DArc;
    mCurModifyType = MNone;
    this->setCursor(Qt::CrossCursor);
}

void MainWindow::cirAct1_triggered()
{
    mCurDrawType = DCircle;
    mCurModifyType = MNone;
    this->setCursor(Qt::CrossCursor);
}

void MainWindow::cirAct2_triggered()
{
    mCurDrawType = DCircle2;
    mCurModifyType = MNone;
    this->setCursor(Qt::CrossCursor);
}

void MainWindow::wheelEvent(QWheelEvent *event)
{
    m_winScale = m_winScale +(event->angleDelta().y()/120.0/10);

    // 下面的代码用于计算m_trans
//    m_trans.reset();
//    m_trans.translate(0,this->height());
//    m_trans.scale(1,-1);
//    m_trans.scale(m_winScale,m_winScale);
/*  矩阵相乘计算m_trans： */
    qreal winScale = 1+event->angleDelta().y()/120.0/10;
    QTransform trans1,trans2,trans3;
    trans1.translate(-event->pos().x(),-event->pos().y());
    trans2.scale(winScale,winScale);
    trans3.translate(event->pos().x(),event->pos().y());
    m_trans = m_trans*trans1*trans2*trans3;

    qDebug() <<  m_trans;
    update();
}

//==平移窗口==//
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
    if(!movept.isNull())
        if(event->buttons() & Qt::MiddleButton)
        {
            mCurDrawType = DNone;
            m_trans.translate(event->pos().x()-movept.x(),
                              movept.y()-event->pos().y());
            //movept = event->pos();
        }
    movept = event->pos();
    if(!isFirst)
    {
        lastpt = event->pos();
        update();
    }
    update();
    QMainWindow::mouseMoveEvent(event);
}

//==选择+删除==//
void MainWindow::on_actionSelect_triggered()
{
    mCurModifyType = MSelect;
    mCurDrawType = DNone;
    this->setCursor(Qt::SizeAllCursor);
}

void MainWindow::on_actionDelete_triggered()
{
    this->setCursor(Qt::ArrowCursor);
    foreach(auto i , mObjVec)
    {
        if(i->mSelected)
            i->mDeleteed = true;
    }
    update();
}
